package com.net.protocol.message.body.sender;

import com.net.protocol.message.Message;

import java.io.UnsupportedEncodingException;

public class SearchTimeASK implements Message.Body.Sender.ASK {
    /*这里定义协议中需要的参数*/
    //检索条件  0：无条件搜索  1：按时间搜索 2：按文件大小搜索 3：按标签搜索
    private byte mSearchCondition = 1;//此处是按时间搜索固定为1，其他方式在类中固定对应条件
    private String mStartTime;//文件开始时间
    private String mEndTime;//文件结束时间
    private byte mStartTimeLength;//账号名长度
    private byte mEndTimeLength;//账号名长度


    /**
     * 构造方法，new 的就是这个  两个参数就是穿件来的
     *  @param startTime 开始时间
     * @param endTime   结束时间
     * @param i
     */
    public SearchTimeASK(String startTime, String endTime) {
        //将传进来的时间赋值给成员变量
        this.mStartTime = startTime;
        this.mEndTime = endTime;
    }

    /**
     * 实现这个方法 打包消息
     *
     * @param buf  这个方法是将参数添加进缓冲数组然后发给服务器
     * @param offset
     * @return
     * @throws UnsupportedEncodingException
     */
    @Override
    public byte[] pack(byte[] buf, int offset) throws UnsupportedEncodingException {
        //将检索条件放入数组
        buf[offset] = mSearchCondition;
        //将开始时间放入数组//年月日时分秒，每个Byte代表一个数值
        String[] startSplit = mStartTime.split(" ");
        String[] startDate = startSplit[0].split("/");
        String[] startTime = startSplit[1].split(":");
        buf[offset + 1] = (byte) (Integer.parseInt(startDate[0]) - 2000);
        buf[offset + 2] = (byte) (Integer.parseInt(startDate[1]));
        buf[offset + 3] = (byte) (Integer.parseInt(startDate[2]));
        buf[offset + 4] = (byte) (Integer.parseInt(startTime[0]));
        buf[offset + 5] = (byte) (Integer.parseInt(startTime[1]));
        buf[offset + 6] = (byte) (Integer.parseInt(startTime[2]));
        //将结束时间放入数组
        String[] endSplit = mStartTime.split(" ");
        String[] endDate = endSplit[0].split("/");
        String[] endTime = endSplit[1].split(":");
        buf[offset + 7] = (byte) (Integer.parseInt(endDate[0]) - 2000);
        buf[offset + 8] = (byte) (Integer.parseInt(endDate[1]));
        buf[offset + 9] = (byte) (Integer.parseInt(endDate[2]));
        buf[offset + 10] =(byte) (Integer.parseInt(endTime[0]));
        buf[offset + 11] =(byte) (Integer.parseInt(endTime[1]));
        buf[offset + 12] =(byte) (Integer.parseInt(endTime[2]));

        return buf;
    }

    /**
     * 也是要复写的
     * 获取消息的长度
     *
     * @return
     * @throws UnsupportedEncodingException
     */
    @Override
    public int getSize() throws UnsupportedEncodingException {
        //此方法返回的就是数组的长度，每一个消息长度不一定
        return 13;
    }

    //以下就是set和get方法
    public byte getSearchCondition() {
        return mSearchCondition;
    }

    public void setSearchCondition(byte searchCondition) {
        mSearchCondition = searchCondition;
    }

    public String getmStartTime() {
        return mStartTime;
    }

    public void setmStartTime(String mStartTime) {
        this.mStartTime = mStartTime;
    }

    public String getmEndTime() {
        return mEndTime;
    }

    public void setmEndTime(String mEndTime) {
        this.mEndTime = mEndTime;
    }

    public byte getmStartTimeLength() {
        return mStartTimeLength;
    }

    public void setmStartTimeLength(byte mStartTimeLength) {
        this.mStartTimeLength = mStartTimeLength;
    }

    public byte getmEndTimeLength() {
        return mEndTimeLength;
    }

    public void setmEndTimeLength(byte mEndTimeLength) {
        this.mEndTimeLength = mEndTimeLength;
    }
}
